package eitwitter.normalization;

import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Supprime les URLs et pseudonymes et decoupe le texte passe en parametre 
 * suivant les symboles de ponctuation et ne conserve ni la ponctuation 
 * ni les URLs ni les pseudos.
 * @author AH & PJ
 */
public class SymbolsLinksNumbersTokenizer implements Normalizer{
	
	/** Expression reguliere pour rechercher et supprimer les URLs */
	final private String urls = "(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
	
	final private String nicknames = "@[a-zA-Z_]+";
	
	@Override
	public HashMap<String, Integer> normalize(String text) {
		HashMap<String, Integer> tokens = new HashMap<String, Integer>();
		
		// Suppression des URLs dans le texte en entree
		Pattern p = Pattern.compile(urls);
		Matcher m = p.matcher(text);
		text = m.replaceAll("");
		
		// Suppression des pseudonymes des utilisateurs
		p = Pattern.compile(nicknames);
		m = p.matcher(text);
		text = m.replaceAll("");
		
		//decoupage suivant les symboles
		// Expression reguliere pour le traitement de la chaine
		p = Pattern.compile("[" + SymbolsTokenizer.symbols + "]*([^" + SymbolsTokenizer.symbols + "]+)");
		m = p.matcher(text);
		while(m.find()){
			String word = m.group(1).toLowerCase();
			
			// On essaye de voir si le mot est un nombre
			try{
				Double.parseDouble(word);
			} catch(Exception ignore){
				
				// Si ce n'est pas le cas, on l'ajoute
				if(tokens.containsKey(word)){	
					tokens.put(word, tokens.get(word) + 1);
				} else {
					// Sinon, ajouter
					tokens.put(word, 1);
				}
			}
		}
		
		// Recuperation de la polarite du tweet		
		return tokens;
	}
}
